App({
  // 全局变量存放处
  globalData: { 
    userInfo: {},       // 用户信息
    token: '',           // 登录凭证
    theme: 'light',      // 主题模式
    baseURL: 'https://4eeb5b6.r6.cpolar.top/', // 本地'http://192.168.2.6:8000/',
                                                // 'https://4eeb5b6.r6.cpolar.top/'
                                                // 'http://localhost:8000/'
    socketTask: null,
    cartCount: 0, // wx.getStorageSync('cartCount') || 0 // 持久化初始化

    navSearch: 46,       // 导航栏(做搜索框了)的高度
    statusBarHeight: 0, // 状态栏高度
    navHeight: 0,       // 顶部到时间底部+导航栏(做搜索框了)的总高度
    tabBarHeight: 100,  // 底部高度

    pendingOrder: null  // 订单轮询用
  },
  // 在页面JS文件中或app.js全局使用
  updateCartBadge() {
    try {
      // 1. 获取购物车数据
      const cartList = wx.getStorageSync('cart') || []
      
      // 2. 计算商品总数（含错误过滤）
      const total = cartList.reduce((sum, item) => {
        // 验证商品数据有效性
        if (item && typeof item.count === 'number' && item.count > 0) {
          return sum + item.count
        }
        return sum
      }, 0)

      // 3. 更新页面数据（带条件判断）
      if (typeof this.setData === 'function') {
        console.log('到更新页面数据')
        this.setData({
          cartCount: total  //> 99 ? '99+' : total // 超过99显示99+
        })
      }

      // 4. 更新TabBar角标（支持多端兼容）
      if (total > 0) {
        // this.globalData.cartCount = total > 99 ? '99+' : total
        this.globalData.cartCount = total
        wx.setTabBarBadge({
          index: 2, // 购物车页面的Tab索引
          text: total.toString()
        })
      } else {
        // 数量为0时移除角标
        wx.removeTabBarBadge({ index: 2 })
      }

      // 5. 返回最新数量供其他逻辑使用
      return total
    } catch (e) {
      console.error('角标更新失败:', e)
      // 异常时清除角标避免显示错误
      wx.removeTabBarBadge({ index: 2 })
      return 0
    }
  },

  // 初始化时获取导航栏以及底部高度 和 订单轮询
  onLaunch: function () {
    this.statusHeight()
    // 初始化时更新购物车角标
    this.updateCartBadge()

    // 冷启动恢复检查(订单轮询用)
    const pendingOrder = wx.getStorageSync('pendingOrder')
    if (pendingOrder) {
      this.checkPendingOrder(pendingOrder)
    }
  },

  onShow() {
    // 从支付页面返回时检查
    if (this.globalData.pendingOrder) {
      this.checkPendingOrder(this.globalData.pendingOrder)
    }
  },
  
  // 订单轮询用
  checkPendingOrder(orderId) {
    wx.showLoading({ title: '正在确认支付状态...' })
    request.get(`/api/orders/status?out_trade_no=${orderId}`).then(({ data }) => {
      if (data.status === 1) {
        wx.reLaunch({ url: `/pages/order/detail?id=${orderId}` })
      } else {
        wx.showToast({ title: '支付尚未完成', icon: 'none' })
      }
    }).finally(() => {
      wx.hideLoading()
      this.globalData.pendingOrder = null
      wx.removeStorageSync('pendingOrder')
    })
  },

  // 获取高度
  statusHeight() {
    // 获取系统信息
    // const systemInfo = wx.getSystemInfoSync() // 废弃了
    const systemInfo = wx.getWindowInfo()   // 获取窗口尺寸、状态栏高度等
    const menuButtonInfo = wx.getMenuButtonBoundingClientRect()
      // 计算导航栏高度
    const statusBarHeight = systemInfo.statusBarHeight
    const navHeight = (menuButtonInfo.top - statusBarHeight) * 2 + menuButtonInfo.height
    this.globalData.statusBarHeight = statusBarHeight
    this.globalData.navHeight = navHeight + statusBarHeight
  },

  // 封装全局更新方法
  updateCartCount(newCount) {
    this.globalData.cartCount = newCount;
    wx.setStorageSync('cartCount', newCount) // 持久化存储
    // 触发角标更新
    this.updateTabBarBadge()

    // 遍历所有页面实例强制更新
    const pages = getCurrentPages();
    pages.forEach(page => {
      if (page.setData) {
        page.setData({ cartCount: newCount });
      }
    });
  },

  // 角标更新函数
  updateTabBarBadge() {
    const count = this.globalData.cartCount
    if (count > 0) {
      wx.setTabBarBadge({
        index: 2, // 假设购物车是第三个tab
        text: count.toString()
      })
    } else {
      wx.removeTabBarBadge({ index: 2 })
    }
  },

  // 判断用户是否登录
  checkLogin() {
    return new Promise((resolve) => {
      if (wx.getStorageSync('token')) {
        resolve(true)
      } else {
        wx.navigateTo({ url: '/pages/login_2/login_2' })
        resolve(false)
      }
    })
  },

})
